package com.xuliugen.springboot.keng;

import com.xuliugen.springboot.keng.BeanA;
import com.xuliugen.springboot.keng.BeanB;
import org.springframework.beans.factory.annotation.Autowired;
/*  1、先加载BeanA
    当Spring在试图加载ServiceA时，先构造了ServiceA，然后发现他依赖BeanA，于是就试图去加载BeanA；
    Spring想构造BeanA，但是发现BeanA在ConfigurationA内部，于是又试图加载ConfigurationA（此时BeanA仍未构造）；
    Spring构造了ConfigurationA的实例，然后发现他依赖BeanB，于是就试图去加载BeanB。
    Spring构造了BeanB的实例，然后发现他依赖BeanA，于是就试图去加载BeanA。
    Spring发现BeanA还没有实例化，此时Spring发现自己回到了步骤2。。。GG。。。

    2、先加载BeanB
    当Spring在试图加载ServiceA时，先构造了ServiceA，然后发现他依赖BeanB，于是就试图去加载BeanB；
    Spring构造了BeanB的实例，然后发现他依赖BeanA，于是就试图去加载BeanA。
    Spring发现BeanA在ConfigurationA内部，于是试图加载ConfigurationA（此时BeanA仍未构造）；
    Spring构造了ConfigurationA的实例，然后发现他依赖BeanB，并且BeanB的实例已经有了，于是将这个依赖填充进ConfigurationA中。
    Spring发现ConfigurationA已经完成了构造、填充了依赖，于是想起来构造了BeanA。
    Spring发现BeanA已经有了实例，于是将他给了BeanB，BeanB填充的依赖完成。
    Spring回到了为ServiceA填充依赖的过程，发现还依赖BeanA，于是将BeanA填充给了ServiceA。
    Spring成功完成了初始化操作。*/
public class ServiceA {
    @Autowired
    private BeanB beanB;

    @Autowired
    private BeanA beanA;

    public ServiceA(){
        System.out.println("ServiceA");
    }
}